/*
 *  控件形状定义
 */
#ifndef _VIEW_SHAPE_H_
#define _VIEW_SHAPE_H_

#include <stdint.h>

/* 形状列表 */
typedef enum
{
    VST_NULL = -1,
    VST_RECT = 0,     /* 矩形(默认) */
    VST_CIRCLE,       /* 圆 */
    VST_SECTOR,       /* 扇形 */
    VST_PROGRESS_BAR, /* 进度条 */
    VST_SCROLL_BAR,   /* 滚动条 */
    VST_SWITCH,       /* 开关 */
    VST_TOTAL
} ViewShapeType;

/* 矩形 */
typedef struct
{
    int32_t rad;      /* 圆角半径 */
    int32_t lineSize; /* 线宽,0表示没有边框 */
    int32_t rotate;   /* 旋转角度,-360~+360,顺时针为正 */
} ViewShapeRect;

/* 圆 */
typedef struct
{
    int32_t rad;      /* 外径 */
    int32_t radInner; /* 内径 */
    int32_t div;      /* 分块数 */
    int32_t divStart; /* 分块起始 */
    int32_t divEnd;   /* 分块结束 */
} ViewShapeCircle;

/* 扇形 */
typedef struct
{
    int32_t rad;      /* 外径 */
    int32_t radInner; /* 内径 */
    int32_t angle;    /* 开角 */
    int32_t rotate;   /* 旋转角度,-360~+360,顺时针为正 */
} ViewShapeSector;

/* 进度条 */
typedef struct
{
    int32_t rad;       /* 圆角半径 */
    int32_t lineSize;  /* 线宽,0表示没有边框 */
    int32_t percent;   /* 百分数值 */
    int32_t edge;      /* 精度条和边界间距 */
    int32_t direction; /* 方向: 0/左到右 1/右到左 2/下到上 3/上到下 */
} ViewShapeProcessBar;

/* (侧边栏)滚动条 */
typedef struct
{
    int32_t rad;          /* 圆角半径 */
    int32_t lineSize;     /* 线宽,0表示没有边框 */
    int32_t percent;      /* 百分数值,表示当前滚动到哪个位置 */
    int32_t percentTotal; /* 滚动部分占总长比例 */
    int32_t direction;    /* 方向: 0/左右滚动 1/上下滚动 */
} ViewShapeScrollBar;

/* 开关 */
typedef struct
{
    int32_t rad;      /* 圆角半径 */
    int32_t lineSize; /* 线宽,0表示没有边框 */
    int32_t isOn;     /* 状态: 0/关 1/开 */
} ViewShapeSwitch;

/* 勾选框 */
typedef struct
{
    int32_t rad;      /* 圆角半径 */
    int32_t lineSize; /* 线宽,0表示没有边框 */
    int32_t isCheck;  /* 状态: 0/关 1/开 */
    int32_t radInner; /* 内径 */
} ViewShapeCheckBox;

/* 控件形状结构体,所有形状共用一块内存 */
typedef union
{
    ViewShapeRect rect;
    ViewShapeCircle circle;
    ViewShapeSector sector;
    ViewShapeProcessBar processBar;
    ViewShapeScrollBar scrollBar;
    ViewShapeSwitch sw; /* switch是关键字,这里改用缩写 */
    ViewShapeCheckBox checkBox;
} ViewShape;

#endif // _VIEW_SHAPE_H_
